import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.SocketException;
import java.util.Scanner;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: fzykd
 * Date: 2022-11-10
 * Time: 19:46
 */

public class TcpEchoClient {
    //网络编程前提 TCP的客户端
    private Socket socket = null;
    //指定服务器的IP和断开
    private String serverIP;
    private int serverPort;

    //构造方法 创建创建socket实例
    public TcpEchoClient(String IP,int port) throws IOException {
        // 这里传入的 ip 和 端口号 的含义表示的不是自己绑定, 而是表示和这个 ip 端口建立连接!!
        // 调用这个构造方法 就会和服务器建立连接 相当于拨电话了
        socket = new Socket(IP,port);
    }

    //启动客户端
    public void start(){
        //
        System.out.println("和服务器建立连接成功!");
        //准备好Scanner对象 从控制台读取内容
        Scanner scanner = new Scanner(System.in);
        try(InputStream inputStream = socket.getInputStream()){
            try(OutputStream outputStream = socket.getOutputStream()){
                while (true){
                    //1.从控制台读取字符串
                    System.out.println("->");
                    String request = scanner.next();
                    //2.根据字符串读取 构造请求 把请求发给服务器
                    PrintWriter writer = new PrintWriter(outputStream);
                    writer.println(request);
                    writer.flush(); // 刷新缓冲区
                    //从服务器读取响应
                    Scanner responseScan = new Scanner(inputStream);
                    //将读取的字符串 解析
                    String response = responseScan.next();

                    System.out.printf("req:%s,resp:%s\n" ,request,response);
                }
            }
        }catch (IOException e){
            e.printStackTrace();
        }
    }

    public static void main(String[] args) throws IOException {
        TcpEchoClient client = new TcpEchoClient("127.0.0.1",9090);

        client.start();
    }

}
